package com.zhiyou100.action01;

import com.zhiyou100.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author yang
 * @className Demo02
 * @packageName com.zhiyou100.action01
 * @Description TODO 参数列表种类
 * @date 2020-08-21 14:18
 */
@Controller
@RequestMapping("/d2")
public class Demo02 {
    @RequestMapping("/m1.action")
    public String testMethod01(String sname, Integer sage) {
        // 1 参数是单值，接受同名的参数请求
        System.out.println("sname " + sname + "   ：：：" + sage);
        return "test01/success";
    }

    @RequestMapping("/m2.action")
    public String testMethod02(Student student) {
        // 2 参数是 Javabean 对象，通过对象的属性来接受同名的请求参数
        // 会把 student 放在 request 域中
        System.out.println("testMethod02 ::: "+student.getSname()+" :: "+student.getSage());
        return "test01/success";
    }

    @RequestMapping("/m3.action")
    public String testMethod03(HttpServletRequest request) {
        // 3 参数是 HttpServletRequest 对象
        /*
        HttpServletRequest 作用
        1 获取请求头
        2 获取请求参数列表
        3 请求转发+请求包含
        4 作为域对象
        5 其他方法
         */
        final String sname = request.getParameter("sname");
        final String sage = request.getParameter("sage");
        String message = sname + " ::: " + sage;
        System.out.println("testMethod03 " + message);

        return "test01/success";
    }

    @RequestMapping("/m4.action")
    public String testMethod04(HttpServletResponse response) throws IOException {
        // 4 参数是 HttpServletResponse 对象
        /*
        HttpServletResponse 作用
        1 设置响应头
        2 设置响应体
        3 重定向
        4 其他
         */
        String message = "<h1>testMethod04</h1> ";

        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print(message);


        System.out.println(message);
        // 已将响应过了，不能再跳转
        return null;
    }

    @RequestMapping("/m5.action")
    public String testMethod05(HttpSession session) {
        // 5 参数是 HttpSession 对象
        /*
        HttpSession 作用
        1 作为域对象
        2 获取 servletContext
        3 其他方法

         */
        String message = "<h1>testMethod05</h1> ";

        session.setAttribute("message", "session_message");


        System.out.println(message);
        return "test01/success";
    }

    @RequestMapping("/m6.action")
    public String testMethod06(Model mv) {
        // 5 参数是 Model 对象 当成 HttpServletRequest 的域对象使用
        /*
        Model 作用
        1 作为域对象

         */
        String message = "<h1>ModelAndView</h1> ";

        mv.addAttribute("message", "model_message");
        System.out.println(message);
        return "test01/success";
    }


}
